const express = require('express');
const app = express();

const { createToken, verifyToken } = require('./utils/tokenutil.js');

// 解决跨域
const cors = require('cors');
app.use(cors());

// 解析post请求
app.use(express.urlencoded({ extended: false }));
app.use(express.json());

// 登录--登录成功-签发token
app.post('/login', (req, res) => {
    if (req.body.username !== 'xiaohao' || req.body.password !== '123456') {
        res.send('用户名或密码登录错误,请重新输入');
    } else {
        var userInfoToken = {
            username: req.body.username,
            signin: true
        };
        // 生成token
        // let tokenStr = createToken(userInfoToken, 60 * 60);
        let tokenStr = createToken(userInfoToken, 30);
        // 返回客户端
        res.send({
            message: '登录成功',
            token: tokenStr
        });
    }
});
// 身份校验
app.use((req, res, next) => {
    console.log(req.url);
    if (req.url != '/login') {
        // 1.token从哪里获取
        // req.headers
        // 用户信息校验的权限信息
        let authorToken = req.headers['authorization'];
        if (authorToken) {
            verifyToken(authorToken).then(rel => {
                // 除了校验token是否合格,也可以利用token去数据库,用户信息做进一步信息校验
                if (rel.signin) {
                    next();
                } else {
                    res.send('校验失败');
                }
            }, err => {
                res.send('token过期/等其他错误信息' + err);
            });
        }
    } else {
        next()
    }
});
// 其他接口访问
app.get('/getMsg', (req, res) => {
    res.send('可以进行其他正常数据请求了');
});
app.listen(3000, () => {
    console.log('3000端口已开启');
});